/*
 * Copyright (c) 2009 LastFM.Desktop Anton Pavlik.
 * All Rights Reserved.
 * 
 * You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, 
 * with or without modifications, and in Source or Object form, provided that You meet the following 
 * conditions:
 * 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
 *
 * 2. You must cause any modified files to carry prominent notices stating that You changed the files; 
 * and
 *
 * 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, 
 * patent, trademark, and attribution notices from the Source form of the Work, excluding those notices 
 * that do not pertain to any part of the Derivative Works.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * You may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 *
 * Unless required by applicable law or agreed to in writing, Licensor provides the Work 
 * (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties 
 * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. 
 * YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE WORK
 * AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE. 
 */
package org.shake.lastfm.ui;

import java.awt.BorderLayout;
import java.io.IOException;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXPanel;
import org.shake.lastfm.model.UserPreferences;
import org.shake.lastfm.ui.info.InfoPanel;
import org.shake.lastfm.ui.playlist.PlaylistPane;

public class Application extends JFrame
{
	private static final long serialVersionUID = 7987661255504999665L;
	
	private final Log log = LogFactory.getLog(Application.class);
	
	public static void main(String... args)
	{
	    JFrame.setDefaultLookAndFeelDecorated(true);

	    SwingUtilities.invokeLater(new Runnable()
	    {
            @Override
            public void run()
            {
                try
                {
                    UIManager.setLookAndFeel("com.lipstikLF.LipstikLookAndFeel");
//                    UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceBusinessLookAndFeel");
                } catch (Exception e)
                {
                    e.printStackTrace();
                }
                new Application().setVisible(true);
            }
	    });
	}
	
	private Application()
	{
	    try
        {
            restoreUserPrefs();
        } catch (IOException e)
        {
            log.warn("Could not restore user preferences: " + e.getMessage());
        }
	    
	    buildUI();
	    addListeners();

	    setDefaultCloseOperation(EXIT_ON_CLOSE);
	    setSize(900, 450);
	}
	
	private void restoreUserPrefs() throws IOException
    {
	    UserPreferences.getInstance().restore();
    }

    private void addListeners()
	{
	}
	
	private void buildUI()
	{
	    setLayout(new BorderLayout());
		
	    JSplitPane split = new JSplitPane();
	    split.setLeftComponent(buildMainPane());
	    split.setRightComponent(buildInfoPane());
	    getContentPane().add(split, BorderLayout.CENTER);
	}
	
	private JComponent buildToolsPane()
	{
		ToolsPane pane = new ToolsPane();
		return pane;
	}
	
	private JComponent buildInfoPane()
	{
	    return new InfoPanel();
	}
	
	private JComponent buildPlaylistPane()
	{
	    return new PlaylistPane();
	}
	
	private JComponent buildMainPane()
	{
	    JXPanel mainPane = new JXPanel(new BorderLayout());
	    mainPane.add(buildPlaylistPane(), BorderLayout.CENTER);
	    mainPane.add(buildToolsPane(), BorderLayout.NORTH);
//	    mainPane.setAlpha(0.65f);
		return mainPane;
	}
}